/** * Copyright 2006-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mybatis.generator.api.dom.java; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Set; import java.util.TreeSet; import org.junit.Test; import org.mybatis.generator.api.dom.OutputUtilities; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; /** * @author Jeff Butler * */ public class FullyQualifiedJavaTypeTest { @Test public void testJavaType() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.lang.String"); //$NON-NLS-1$ assertFalse(fqjt.isExplicitlyImported()); assertEquals("String", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.lang.String", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.lang", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(0, fqjt.getImportList().size()); } @Test public void testSimpleType() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("com.foo.Bar"); //$NON-NLS-1$ assertTrue(fqjt.isExplicitlyImported()); assertEquals("Bar", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("com.foo.Bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("com.foo.Bar", fqjt.getImportList().get(0)); } @Test public void testSimpleType2() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("com.foo.bar"); //$NON-NLS-1$ assertTrue(fqjt.isExplicitlyImported()); assertEquals("bar", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("com.foo.bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("com.foo.bar", fqjt.getImportList().get(0)); } @Test public void testSimpleType3() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("int"); //$NON-NLS-1$ assertFalse(fqjt.isExplicitlyImported()); assertEquals("int", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("int", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(0, fqjt.getImportList().size()); } @Test public void testGenericType1() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<java.lang.String>"); //$NON-NLS-1$ assertTrue(fqjt.isExplicitlyImported()); assertEquals("List<String>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.List<java.lang.String>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("java.util.List", fqjt.getImportList().get(0)); assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testGenericType2() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map<java.lang.String, java.util.List<java.lang.String>>"); //$NON-NLS-1$ assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testGenericType3() { FullyQualifiedJavaType listOfStrings = new FullyQualifiedJavaType("java.util.List"); //$NON-NLS-1$ listOfStrings.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$ FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map"); //$NON-NLS-1$ fqjt.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$ fqjt.addTypeArgument(listOfStrings); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testGenericType4() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>"); //$NON-NLS-1$ assertTrue(fqjt.isExplicitlyImported()); assertEquals("List<Map<String, Object>>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testWildcardType1() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map<java.lang.String, ? extends com.foo.Bar>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<String, ? extends Bar>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<java.lang.String, ? extends com.foo.Bar>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testWildcardType2() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map<java.lang.String, ?>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<String, ?>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<java.lang.String, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getImportList().get(0)); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testWildcardType3() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map<? extends java.util.List<?>, ?>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<? extends List<?>, ?>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<? extends java.util.List<?>, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testWildcardType4() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.Map<?, ?>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Map<?, ?>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.Map<?, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("java.util.Map", fqjt.getImportList().get(0)); assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testWildcardType5() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("List<? extends Map<? super Object, ?>>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$ } @Test public void testUppercasePackage1() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Inner", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("org.foo.Bar.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("org.foo.Bar", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("org.foo.Bar.Inner", fqjt.getImportList().get(0)); } @Test public void testUppercasePackage2() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner.Inner"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("Inner", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("org.foo.Bar.Inner.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("org.foo.Bar.Inner", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(1, fqjt.getImportList().size()); assertEquals("org.foo.Bar.Inner.Inner", fqjt.getImportList().get(0)); } @Test public void testUppercasePackage3() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<org.foo.Bar.Inner>"); assertTrue(fqjt.isExplicitlyImported()); assertEquals("List<Inner>", fqjt.getShortName()); //$NON-NLS-1$ assertEquals("java.util.List<org.foo.Bar.Inner>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$ assertEquals(2, fqjt.getImportList().size()); assertTrue(fqjt.getImportList().contains("java.util.List")); assertTrue(fqjt.getImportList().contains("org.foo.Bar.Inner")); } @Test public void testImportList() { Set<FullyQualifiedJavaType> types = new TreeSet<FullyQualifiedJavaType>(); types.add(new FullyQualifiedJavaType("foo.bar.Example")); types.add(new FullyQualifiedJavaType("foo.bar.Example.Criteria")); types.add(new FullyQualifiedJavaType("foo.bar.Example.Criterion")); assertEquals(3, types.size()); Set<String> imports = OutputUtilities.calculateImports(types); assertEquals(3, imports.size()); } @Test public void testByteArray1() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[]"); assertFalse(fqjt.isPrimitive()); assertTrue(fqjt.isArray()); } @Test public void testByteArray2() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[ ]"); assertFalse(fqjt.isPrimitive()); assertTrue(fqjt.isArray()); } @Test public void testStringArray() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.lang.String[]"); assertFalse(fqjt.isPrimitive()); assertTrue(fqjt.isArray()); } @Test public void testComplexArray() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<String>[]"); assertFalse(fqjt.isPrimitive()); assertTrue(fqjt.isArray()); } @Test public void testComplexArrayWithoutGenerics() { FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List[]"); assertFalse(fqjt.isPrimitive()); assertTrue(fqjt.isArray()); assertTrue(fqjt.getImportList().contains("java.util.List")); assertFalse(fqjt.getImportList().contains("java.util.List[]")); } }